import 'reflect-metadata'

/**
 * 应用自定义异常过滤器
 * @param filters 自定义异常过滤器( 可能是异常过滤器类也可能是异常过滤器实例 )组成的数组
 */
export function UseFilters(...filters) {
  // 可能是一个类装饰器 也可能是一个函数装饰器
  // 类装饰器参数 类本身
  // 方法装饰器装饰在类的原型的方法上参数 类的原型对象 被装饰的方法名 属性描述符
  return (target: Function | Object, property?: string | symbol, descriptor?: PropertyDescriptor) => {
    if (descriptor) { // 方法装饰器
      Reflect.defineMetadata('filters', filters, descriptor.value) // 给方法添加一个 filter 元数据
    } else { // 类装饰器
      Reflect.defineMetadata('filters', filters, target) // 给类添加一个 filter 元数据
    }
  }
}
